#ifndef __TOOL_H__
#define __TOOL_H__

#include "myprotocol.h"
#include <pthread.h>

#define CONFIG_PATH "./config"

/**
 * @brief 读取配置文件
 * @param myprotocol_t结构体指针
 * @retval 0: 成功, -1: 失败
 */
int read_config(myprotocol_t *buf);

/**
 * @brief 读取阈值
 * @param myprotocol_t结构体指针
 * @retval 0: 成功, -1: 失败
 */
int read_threshold_config(myprotocol_t *buf);

/**
 * @brief 写入阈值
 * @param myprotocol_t结构体指针
 * @retval 0: 成功, -1: 失败
 */
int write_threshold_config(myprotocol_t *buf);

/**
 * @brief 网络初始化
 * @param ip地址 和 端口号
 * @retval 成功返回socket描述符, 失败返回-1
 */
int net_init(const char *ip, const int port);

/**
 * @brief 所有设备数据和设备初始化
 * @param 空
 * @retval 成功返回0, 失败返回-1
 */
int init_dev(void);

/**
 * @brief 获取环境数据线程函数
 * @param myprotocol_t结构体指针
 * @retval 空
 */
void *get_envdata_thread(void *arg);

/**
 * @brief 设置阈值线程函数
 * @param myprotocol_t结构体指针
 * @retval 空
 */
void *set_threshold_thread(void *arg);

/**
 * @brief 用于控制设备的线程函数
 * @param myprotocol_t结构体指针
 * @retval 空
 */
void *control_dev_thread(void *arg);

/**
 * @brief 根据阈值维护设备状态( 环境状态 )
 * @param 空
 * @retval 空
 */
void *maintain_dev_thread(void *arg);

/**
 * @brief 数码管显示线程函数
 * @param 空
 * @retval 空
 */
void *display_thread(void *arg);

#endif